package com.snj.test;

import java.util.*;

/**
 * @author yujie
 * @data 2024/11/14 7:53
 */
public class Main3 {
    public static void main(String[] args) {
        Integer start = 5;
        Integer end = 13;
        // 示例的 intList
        List<List<Integer>> intList = new ArrayList<>();
        intList.add(new ArrayList<>(Arrays.asList(4, 4, 4, 2, 14)));
        intList.add(new ArrayList<>(Arrays.asList(1)));

        List<List<Integer>> flagList = countPersonFlag(end, intList);

        List<List<Integer>> sumTest = countSumFlag(end, intList);
        System.out.println(flagList);  // 输出结果
        System.out.println(sumTest);  // 输出结果
        System.out.println("-------------------");


        Integer num = start / 2;  // 自动向下取整


        for (int i = 0; i < sumTest.size(); i++) {
            List<Integer> currSum = sumTest.get(i);
            List<Integer> currResult = flagList.get(i);
            for (int j = 0; j < currSum.size(); j++) {
                Integer temp = currSum.get(j);

                if (temp <= num) {
                    if (j == 0) {
                        if (j + 1 >= currSum.size()) {
                            currSum.set(j, start);
                        } else {
                            currResult.set(j + 1, currResult.get(j) + 1);
                            currResult.remove(j);
                            currSum.remove(j);
                            j--; // 因为删除了元素，需要减少j
                        }
                    } else {
                        currResult.set(j - 1, currResult.get(j - 1) + 1);
                        currResult.remove(j);
                        currSum.remove(j);
                        j--; // 因为删除了元素，需要减少j
                    }
                } else if (temp < start) {
                    currSum.set(j, start);
                } else {
                    boolean oddFlag = isOdd(temp);
                    if (!oddFlag) {
                        if (temp > end) {
                            currSum.set(j, temp);
                        } else {
                            currSum.set(j, temp + 1);
                        }
                    }
                }
            }
        }
        System.out.println(flagList);  // 输出结果
        System.out.println(sumTest);  // 输出结果

        Map<String, List<Integer>> map = new HashMap<>();
        map.put("技术1组", Arrays.asList(1, 1));
        map.put("技术2组", Arrays.asList(2, 2));
        map.put("技术3组", Arrays.asList(3, 3));
        map.put("技术4组", Arrays.asList(4, 4));
        map.put("技术5组", Arrays.asList(5, 5));
        map.put("技术6组", Arrays.asList(6, 6));
        map.put("技术7组", Arrays.asList(7, 7));
        map.put("技术8组", Arrays.asList(8, 8));
//
//        int flag = 0;
//        Map<String, List<Integer>> temp = new HashMap<>();
//        for (int i = 0; i < flagList.size(); i++) {
//            // 人数 和
//            List<Integer> currSum = sumTest.get(i);
//            // 标记
//            List<Integer> currResult = flagList.get(i);
//            int count = 0;
//            for (int j = 0; j < currResult.size(); j++) {
//                List<Integer> arrayList = new ArrayList<>();
//                int index = currResult.get(j);
//                // 第一个数 就是 循环继续
//                if (j == 0) {
//                    for (int k = 1; k <= index; k++) {
//                        flag += 1;
//                        String keyName = "技术" + flag + "组";
//                        List<Integer> list = map.get(keyName);
//                        if (!list.isEmpty()) {
//                            arrayList.addAll(list);
//                        }
//                    }
//                } else {
//                    int size = index - currResult.get(j - 1);
//                    // 非 第一个 就是下标
//                    for (int k = 1; k <= size; k++) {
//                        flag += 1;
//                        String keyName = "技术" + flag + "组";
//                        List<Integer> list = map.get(keyName);
//                        if (!list.isEmpty()) {
//                            arrayList.addAll(list);
//                        }
//                    }
//                }
//                count += 1;
//                String name = "商务" + (temp.size() + 1) + "组";
//                temp.put(name, arrayList);
//            }
//        }

        Map<String, List<Integer>> temp = new HashMap<>();
        int flag = 0;

        for (int i = 0; i < flagList.size(); i++) {
            List<Integer> currResult = flagList.get(i);
            int prevIndex = 0;

            for (int j = 0; j < currResult.size(); j++) {
                int index = currResult.get(j);
                List<Integer> arrayList = new ArrayList<>();

                for (int k = prevIndex + 1; k <= index; k++) {
                    flag++;
                    String keyName = "技术" + flag + "组";
                    List<Integer> list = map.getOrDefault(keyName, Collections.emptyList());
                    arrayList.addAll(list);
                }

                prevIndex = index;
                String name = "商务" + (temp.size() + 1) + "组";
                temp.put(name, arrayList);
            }
        }

        System.out.println(temp);
    }

    public static boolean isOdd(int number) {
        return number % 2 != 0;
    }

    public static List<List<Integer>> countPersonFlag(Integer end, List<List<Integer>> intList) {
        List<List<Integer>> result = new ArrayList<>();

        for (List<Integer> list : intList) {
            Integer sum = 0;
            int indexFlag = 1;
            List<Integer> indices = new ArrayList<>();
            for (int i = 0; i < list.size(); i++) {
                sum += list.get(i);
                if (sum >= end || (i < list.size() - 1 && sum + list.get(i + 1) > end)) {
                    // 记录当前索引 + 1
                    indices.add(i + 1);
                    // 将 sum 归零
                    sum = 0;
                }
            }
            if (sum > 0) {
                // 如果循环结束时 sum 还有值，记录最后一个索引
                indices.add(list.size());
            }
            result.add(indices);
        }
        return result;
    }


    public static List<List<Integer>> countSumFlag(Integer end, List<List<Integer>> intList) {
        List<List<Integer>> valuesResult = new ArrayList<>();
        for (List<Integer> list : intList) {
            Integer sum = 0;
            List<Integer> values = new ArrayList<>();
            for (int i = 0; i < list.size(); i++) {
                sum += list.get(i);
                if (sum >= end || (i < list.size() - 1 && sum + list.get(i + 1) > end)) {
                    // 记录当前的累加值
                    values.add(sum);
                    sum = 0;
                }
            }
            if (sum > 0) {
                // 记录最后一个累加值
                values.add(sum);
            }
            valuesResult.add(values);
        }
        return valuesResult;
    }
}

//class HelloWord {
//    private Integer businessStart;
//    private Integer businessEnd;
//
//    public Integer getBusinessStart() {
//        return businessStart;
//    }
//
//    public void setBusinessStart(Integer businessStart) {
//        this.businessStart = businessStart;
//    }
//
//    public Integer getBusinessEnd() {
//        return businessEnd;
//    }
//
//    public void setBusinessEnd(Integer businessEnd) {
//        this.businessEnd = businessEnd;
//    }
//}
